package com.sisgesbyte.web.managedBean.auditoria;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

import org.primefaces.event.SelectEvent;
import org.primefaces.event.UnselectEvent;

import com.sisgesbyte.common.ConstantesInternasSistema;
import com.sisgesbyte.services.sistema.AuditoriaSistema;
import com.sisgesbyte.services.sistema.bean.AccesoLogResponse;
import com.sisgesbyte.services.sistema.bean.LogAccesoBean;
import com.sisgesbyte.web.managedBean.common.MantenimientoAbstract;
import com.sisgesbyte.web.managedBean.seguridad.OpcionesControlador;

@ManagedBean
@ViewScoped
public class LogAccesoSistemaMBean extends MantenimientoAbstract implements Serializable{

	private static final long serialVersionUID = 1L;

	@EJB
	private AuditoriaSistema auditoriaSistema;
	private List<LogAccesoBean> listaAccesoSistema;
	private List<LogAccesoBean> selectedLogAcceso;
	@ManagedProperty(value="#{opcionesControlador}")
	private OpcionesControlador opcionesControlador;
	private String tipoMantenimiento;
	
	@PostConstruct
	private void init(){
		tipoMantenimiento="";
		inicializar();
	}
	
	public List<LogAccesoBean> getListaAccesoSistema() {
		return listaAccesoSistema;
	}

	public void setListaAccesoSistema(List<LogAccesoBean> listaAccesoSistema) {
		this.listaAccesoSistema = listaAccesoSistema;
	}

	public OpcionesControlador getOpcionesControlador() {
		return opcionesControlador;
	}

	public void setOpcionesControlador(OpcionesControlador opcionesControlador) {
		this.opcionesControlador = opcionesControlador;
	}


	public String getTipoMantenimiento() {
		return tipoMantenimiento;
	}

	public void setTipoMantenimiento(String tipoMantenimiento) {
		this.tipoMantenimiento = tipoMantenimiento;
	}

	public List<LogAccesoBean> getSelectedLogAcceso() {
		return selectedLogAcceso;
	}

	public void setSelectedLogAcceso(List<LogAccesoBean> selectedLogAcceso) {
		this.selectedLogAcceso = selectedLogAcceso;
	}

	@Override
	public void inicializar() {
		try{
			AccesoLogResponse response = auditoriaSistema.listaAccesoSistema(ObtenerIdTransaccion(), null);
			if(Integer.valueOf(response.getCodigoRespuesta()) > -1){
				this.listaAccesoSistema=response.getListaAccesoSistema();
			}else{
				System.out.println("No se encontraron Datos " + response.getCodigoRespuesta() + " - " + response.getMensajeRespuesta());
			}
		}catch(Exception e){
			System.out.println("Ocurrio un Error en el Proceso " + e);
		}
	}

	@Override
	public void unSelect(UnselectEvent event) {
		opcionesControlador.habilitarControles(selectedLogAcceso.size());
	}

	@Override
	public void checkSelect(SelectEvent event) {
		opcionesControlador.habilitarControles(selectedLogAcceso.size());
	}

	@Override
	public void seleccionarItem(SelectEvent event) {
		opcionesControlador.habilitarControles(selectedLogAcceso.size());
	}

	@Override
	public void dobleSelect(SelectEvent event) {
		opcionesControlador.habilitarControles(selectedLogAcceso.size());
		setTipoMantenimiento(ConstantesInternasSistema.TIPO_MANTENIMIENTO_UPDATE);
	}

	@Override
	public void nuevoItem() {
		List<LogAccesoBean> listaBean = new ArrayList<LogAccesoBean>();
		LogAccesoBean  bean = new LogAccesoBean();
		bean.setCiudad("");
		listaBean.add(bean);
		setSelectedLogAcceso(listaBean);
		setTipoMantenimiento(ConstantesInternasSistema.TIPO_MANTENIMIENTO_NUEVO);
	}

	@Override
	public void editItem() {
		setTipoMantenimiento(ConstantesInternasSistema.TIPO_MANTENIMIENTO_UPDATE);
	}

	@Override
	public void updateInsertItem() {
		if(tipoMantenimiento.equalsIgnoreCase(ConstantesInternasSistema.TIPO_MANTENIMIENTO_NUEVO)){
			guardarItem();
		}
		if(tipoMantenimiento.equalsIgnoreCase(ConstantesInternasSistema.TIPO_MANTENIMIENTO_UPDATE)){
			modificarItem();
		}
	}

	@Override
	public String ObtenerIdTransaccion() {
		FacesContext fCtx = FacesContext.getCurrentInstance();
		HttpSession session = (HttpSession) fCtx.getExternalContext().getSession(false);
		String sessionId = session.getId().replace(".undefined", "");
		return sessionId;
	}

	@Override
	public void guardarItem() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void modificarItem() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void eliminarItem() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void actualizarEstado() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void limpiarFormulario() {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void crearFiltro() {
		// TODO Auto-generated method stub
		
	}

}
